package ar.org.cfired.creditos.servlets;
import javax.servlet.*;
import javax.servlet.http.*;

import java.io.*;
import java.util.Iterator;
import java.util.List;
import java.util.Vector;

import ar.org.cfired.hibernate.utils.HibernateUtil;
import ar.org.cfired.creditos.gui.Encabezado;
import ar.org.cfired.creditos.parametros.*;


import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;


public class AjaxTablas extends HttpServlet{

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	public void init() throws ServletException {
	    // Initialization here...
	  }
	
    public void service( HttpServletRequest req, HttpServletResponse res ) 
      throws ServletException 
    {
    	Vector<String> ids = null;
    	Vector<String> descripciones = null;
    	Session session = null;
    	
    try
       { 
    	String tabla = req.getParameter("tabla");
      	String seleccionado = req.getParameter("seleccionado");
      	String filtro = req.getParameter("filtro");
      	String orden = req.getParameter("orden");
      	String arreglo = req.getParameter("arreglo");
      	String varMeta = Encabezado.meta();
      	if (filtro != null) filtro = " where " + filtro;
      	else filtro = new String();
      	if (orden != null) orden = " order by " + orden;
      	else orden = new String();
      	if (arreglo== null) arreglo = new String();
      	if (seleccionado==null) seleccionado = new String();
      	if (tabla == null) tabla = new String();
      	
      	ids = new Vector<String>();
      	descripciones = new Vector<String>();
      	
      	if (tabla.equals("actividades")) {
      			session = HibernateUtil.getSessionFactory().getCurrentSession();
      			Transaction t = session.beginTransaction();
      			try {
      				List<Actividad> listaActividades = (List<Actividad>)session.createQuery("from Actividad" + filtro + orden ).list();
      				Iterator<Actividad> actividades = listaActividades.iterator();
      				Actividad actividadActual = null;
      				while (actividades.hasNext()) {
      					actividadActual = actividades.next();
      					ids.add(actividadActual.getActId().replace("'", "\\'"));
      					descripciones.add(actividadActual.getActDescripcion().replace("'", "\\'"));
      				}
      				t.rollback();
      				if (session.isOpen()) session.close();
      				listaActividades.clear();
      				actividades = null;
      			}
      			catch (HibernateException e){
      				System.err.println(e.toString());
      			}
      	}
      	if (tabla.equals("ciius")) {
  			session = HibernateUtil.getSessionFactory().getCurrentSession();
  			Transaction t = session.beginTransaction();
  			try {
  				List<Ciiu> listaCiiues = (List<Ciiu>)session.createQuery("from Ciiu" + filtro + orden).list();
  				Iterator<Ciiu> Ciiues = listaCiiues.iterator();
  				Ciiu CiiuActual = null;
  				while (Ciiues.hasNext()) {
  					CiiuActual = Ciiues.next();
  					if(!CiiuActual.getCodigo().contains("*")){
	  					ids.add(CiiuActual.getCodigo().replace("'", "\\'"));  					
	  					descripciones.add(CiiuActual.getDescripcion().replace("'", "\\'"));
  					}
  				}
  				t.rollback();
  				if (session.isOpen()) session.close();
  				listaCiiues.clear();
  				Ciiues = null;
  			}
  			catch (HibernateException e){
  				System.err.println(e.toString());
  			}
      	}

      	if (tabla.equals("departamentos")) {
  			session = HibernateUtil.getSessionFactory().getCurrentSession();
  			Transaction t = session.beginTransaction();
      		try {
  				List<Departamento> listaDepartamentoes = (List<Departamento>)session.createQuery("from Departamento" + filtro + orden).list();
  				Iterator<Departamento> Departamentoes = listaDepartamentoes.iterator();
  				Departamento DepartamentoActual = null;
  				while (Departamentoes.hasNext()) {
  					DepartamentoActual = Departamentoes.next();
					ids.add(String.valueOf(DepartamentoActual.getDepId()).replace("'", "\\'"));  										
  					descripciones.add(DepartamentoActual.getDepDescripcion().replace("'", "\\'"));
  				}
  				t.rollback();
  				if (session.isOpen()) session.close();
  				listaDepartamentoes.clear();
  				Departamentoes = null;
  			}
  			catch (HibernateException e){
  				System.err.println(e.toString());
  			}      		
      	}
      	
      	if (tabla.equals("lineas")) {
  			session = HibernateUtil.getSessionFactory().getCurrentSession();
  			Transaction t = session.beginTransaction();
      		try {
      			List<LineaDeCredito> listaLineaDeCreditoes = (List<LineaDeCredito>)session.createQuery("from LineaDeCredito" + filtro + orden).list();
      			Iterator<LineaDeCredito> LineaDeCreditoes = listaLineaDeCreditoes.iterator();
      			LineaDeCredito LineaDeCreditoActual = null;
      			while (LineaDeCreditoes.hasNext()) {
      				LineaDeCreditoActual = LineaDeCreditoes.next();
      				ids.add(String.valueOf(LineaDeCreditoActual.getLinCodigo()).replace("'", "\\'"));  										
  					descripciones.add(LineaDeCreditoActual.getLinDescripcion().replace("'", "\\'"));
      			}
  				t.rollback();
  				if (session.isOpen()) session.close();
  				listaLineaDeCreditoes.clear();
  				LineaDeCreditoes = null;
  			}
      		catch (HibernateException e){
  				System.err.println(e.toString());
  			}      		
      	}

      	if (tabla.equals("modos")) {
  			session = HibernateUtil.getSessionFactory().getCurrentSession();
  			Transaction t = session.beginTransaction();
      		try {
      			List<Modo> listaModoes = (List<Modo>)session.createQuery("from Modo" + filtro + orden).list();
      			Iterator<Modo> Modoes = listaModoes.iterator();
      			Modo ModoActual = null;
      			while (Modoes.hasNext()) {
      				ModoActual = Modoes.next();
      				ids.add(String.valueOf(ModoActual.getModId()));  										
  					descripciones.add(ModoActual.getModDescripcion());
      			}
  				t.rollback();
  				if (session.isOpen()) session.close();
  				listaModoes.clear();
  				Modoes = null;
  			}
      		catch (HibernateException e){
  				System.err.println(e.toString());
  			}      		
      	}

      	
      	if (tabla.equals("nacionalidades")) {
      			session = HibernateUtil.getSessionFactory().getCurrentSession();
      			Transaction t = session.beginTransaction();
          		try {
          			List<Nacionalidad> listaComentarios = (List<Nacionalidad>)session.createQuery("from Nacionalidad" + filtro + orden).list();
          			Iterator<Nacionalidad> opciones = listaComentarios.iterator();
          			Nacionalidad opcionActual = null;
          			while (opciones.hasNext()) {
          				opcionActual = opciones.next();
          				ids.add(String.valueOf(opcionActual.getNacId()).replace("'", "\\'"));  										
      					descripciones.add(opcionActual.getNacDescripcion().replace("'", "\\'"));
          			}
      				t.rollback();
      				if (session.isOpen()) session.close();
      				listaComentarios.clear();
      				opciones = null;
      			}
          		catch (HibernateException e){
      				System.err.println(e.toString());
      			}      		
          	}
      	
      	if (tabla.equals("provincias")) {
  			session = HibernateUtil.getSessionFactory().getCurrentSession();
  			Transaction t = session.beginTransaction();
      		try {
      			List<Provincia> listaProvinciaes = (List<Provincia>)session.createQuery("from Provincia" + filtro + orden).list();
      			Iterator<Provincia> Provinciaes = listaProvinciaes.iterator();
      			Provincia ProvinciaActual = null;
      			while (Provinciaes.hasNext()) {
      				ProvinciaActual = Provinciaes.next();
      				ids.add(String.valueOf(ProvinciaActual.getProIdSba()).replace("'", "\\'"));  										
  					descripciones.add(ProvinciaActual.getProDescripcion().replace("'", "\\'"));      				
      			}
  				t.rollback();
  				if (session.isOpen()) session.close();
  				listaProvinciaes.clear();
  				Provinciaes = null;
  			}
      		catch (HibernateException e){
  				System.err.println(e.toString());
  			}      		
      	}

      	
      	if (tabla.equals("tipo_alternativo")) {
  			session = HibernateUtil.getSessionFactory().getCurrentSession();
  			Transaction t = session.beginTransaction();
      		try {
      			List<TipoAlternativo> listaTipoAlternativoes = (List<TipoAlternativo>)session.createQuery("from TipoAlternativo" + filtro + orden).list();
      			Iterator<TipoAlternativo> TipoAlternativoes = listaTipoAlternativoes.iterator();
      			TipoAlternativo TipoAlternativoActual = null;
      			while (TipoAlternativoes.hasNext()) {
      				TipoAlternativoActual = TipoAlternativoes.next();
      				ids.add(String.valueOf(TipoAlternativoActual.getTalId()).replace("'", "\\'"));  										
  					descripciones.add(TipoAlternativoActual.getTalDescripcion().replace("'", "\\'"));      				
      			}
  				t.rollback();
  				if (session.isOpen()) session.close();
  				listaTipoAlternativoes.clear();
  				TipoAlternativoes = null;
  			}
      		catch (HibernateException e){
  				System.err.println(e.toString());
  			}      		
      	}

      	if (tabla.equals("tipo_cuit")) {
  			session = HibernateUtil.getSessionFactory().getCurrentSession();
  			Transaction t = session.beginTransaction();
      		try {
      			List<TipoCuit> listaTipoCuites = (List<TipoCuit>)session.createQuery("from TipoCuit" + filtro + orden).list();
      			Iterator<TipoCuit> TipoCuites = listaTipoCuites.iterator();
      			TipoCuit TipoCuitActual = null;
      			while (TipoCuites.hasNext()) {
      				TipoCuitActual = TipoCuites.next();
      				ids.add(String.valueOf(TipoCuitActual.getTdoId()).replace("'", "\\'"));  										
  					descripciones.add(TipoCuitActual.getTdoDescripcion().replace("'", "\\'"));      				
      			}
  				t.rollback();
  				if (session.isOpen()) session.close();
  				listaTipoCuites.clear();
  				TipoCuites = null;
  			}
      		catch (HibernateException e){
  				System.err.println(e.toString());
  			}      		
      	}
      	
      	if (tabla.equals("tipo_documento")) {
  			session = HibernateUtil.getSessionFactory().getCurrentSession();
  			Transaction t = session.beginTransaction();
      		try {
      			List<TipoDocumento> listaTipoDocumentoes = (List<TipoDocumento>)session.createQuery("from TipoDocumento" + filtro + orden).list();
      			Iterator<TipoDocumento> TipoDocumentoes = listaTipoDocumentoes.iterator();
      			TipoDocumento TipoDocumentoActual = null;
      			while (TipoDocumentoes.hasNext()) {
      				TipoDocumentoActual = TipoDocumentoes.next();
      				ids.add(String.valueOf(TipoDocumentoActual.getTdoId()).replace("'", "\\'"));  										
  					descripciones.add(TipoDocumentoActual.getTdoDescripcion().replace("'", "\\'"));      				
      			}
  				t.rollback();
  				if (session.isOpen()) session.close();
  				listaTipoDocumentoes.clear();
  				TipoDocumentoes = null;
  			}
      		catch (HibernateException e){
  				System.err.println(e.toString());
  			}      		
      	}

      	if (tabla.equals("tipo_empresa")) {
  			session = HibernateUtil.getSessionFactory().getCurrentSession();
  			Transaction t = session.beginTransaction();
      		try {
      			List<TipoEmpresa> listaTipoEmpresaes = (List<TipoEmpresa>)session.createQuery("from TipoEmpresa" + filtro + orden).list();
      			Iterator<TipoEmpresa> TipoEmpresaes = listaTipoEmpresaes.iterator();
      			TipoEmpresa TipoEmpresaActual = null;
      			while (TipoEmpresaes.hasNext()) {
      				TipoEmpresaActual = TipoEmpresaes.next();
      				ids.add(String.valueOf(TipoEmpresaActual.getTemId()).replace("'", "\\'"));  										
  					descripciones.add(TipoEmpresaActual.getTemDescripcion().replace("'", "\\'"));      				
      			}
  				t.rollback();
  				if (session.isOpen()) session.close();
  				listaTipoEmpresaes.clear();
  				TipoEmpresaes = null;
  			}
      		catch (HibernateException e){
  				System.err.println(e.toString());
  			}      		
      	}

      	if (tabla.equals("tipo_persona")) {
  			session = HibernateUtil.getSessionFactory().getCurrentSession();
  			Transaction t = session.beginTransaction();
      		try {
      			List<TipoPersona> listaTipoPersonaes = (List<TipoPersona>)session.createQuery("from TipoPersona" + filtro + orden).list();
      			Iterator<TipoPersona> TipoPersonaes = listaTipoPersonaes.iterator();
      			TipoPersona TipoPersonaActual = null;
      			while (TipoPersonaes.hasNext()) {
      				TipoPersonaActual = TipoPersonaes.next();
      				ids.add(String.valueOf(TipoPersonaActual.getTpeId()).replace("'", "\\'"));  										
  					descripciones.add(TipoPersonaActual.getTpeDescripcion().replace("'", "\\'"));      				
      			}
  				t.rollback();
  				if (session.isOpen()) session.close();
  				listaTipoPersonaes.clear();
  				TipoPersonaes = null;
  			}

      		catch (HibernateException e){
  				System.err.println(e.toString());
  			}      		
      	}
      	
      	
      	if (tabla.equals("guias")) {
    		session = HibernateUtil.getSessionFactory().getCurrentSession();
    		Transaction t = session.beginTransaction();
    		try {
    			List<Guia> listaGuias = (List<Guia>)session.createQuery("from Guia" + filtro + orden).list();
    			Iterator<Guia> guias = listaGuias.iterator();
    			Guia guiaActual = null;
    			while (guias.hasNext()) {
    				guiaActual = guias.next();
    				ids.add(String.valueOf(guiaActual.getGuiId()));  					
    				descripciones.add(guiaActual.getGuiNombre());
    			}
  				t.rollback();
  				if (session.isOpen()) session.close();
  				listaGuias.clear();
  				guias = null;
    		}
    		catch (HibernateException e){
    			System.err.println(e.toString());
    		}
    	}
      	
      	if (tabla.equals("sectorialistas")) {
    		session = HibernateUtil.getSessionFactory().getCurrentSession();
    		Transaction t = session.beginTransaction();
    		try {
    			Query q = session.getNamedQuery("buscaSectorialistas");
    			String taskID = req.getParameter("taskID");
    			q.setInteger("taskID", Integer.valueOf(taskID));
    			List<Object[]> listaSectorialistas = (List<Object[]>)q.list();

    			Iterator<Object[]> Sectorialistas = (Iterator<Object[]>)listaSectorialistas.iterator();
    			Sectorialista SectorialistaActual;
    			Object[] resp;
    			while (Sectorialistas.hasNext()) {
    				resp = (Object[])Sectorialistas.next();
    				SectorialistaActual = new Sectorialista();
    				SectorialistaActual.parseObject(resp);				
    				ids.add(String.valueOf(SectorialistaActual.getId()));  					
    				descripciones.add(SectorialistaActual.getNombre() + ":" + SectorialistaActual.getCantDocumentosTomados() + ":" + SectorialistaActual.getCantDocumentosTratados() + ":" + SectorialistaActual.getConsultado());
    			}
  				t.rollback();
  				if (session.isOpen()) session.close();
  				listaSectorialistas.clear();
  				Sectorialistas = null;
    		}
    		catch (HibernateException e){
    			System.err.println(e.toString());
    		}
    	}  	
      	
      	if (tabla.equals("bancos")) {
    		session = HibernateUtil.getSessionFactory().getCurrentSession();
    		Transaction t = session.beginTransaction();
    		try {
    			List<Banco> listaBancos = (List<Banco>)session.createQuery("from Banco" + filtro + orden).list();
    			
    			Iterator<Banco> bancos = (Iterator<Banco>)listaBancos.iterator();
    			Banco bancoActual;
    			
    			while (bancos.hasNext()) {
    				bancoActual = (Banco)bancos.next();
    				//bancoActual = new Sectorialista();
    				//bancoActual.parseObject(resp);				
    				ids.add(String.valueOf(bancoActual.getBanId()));  					
    				descripciones.add(bancoActual.getBanNombre());
    			}
  				t.rollback();
  				if (session.isOpen()) session.close();
  				listaBancos.clear();
  				bancos = null;
    		}
    		catch (HibernateException e){
    			System.err.println(e.toString());
    		}
    	}  	
      	

      	// Write the response
		 //res.setContentType("text/html; charset=Windows-1250");
	     //PrintWriter out = new PrintWriter(new OutputStreamWriter(res.getOutputStream(), "Windows-1250"), true);
       	 res.setContentType("text/html; charset=iso-8859-1"); 
	     PrintWriter out = res.getWriter();

   //int indiceSeleccionado=-1;
   //out.print(arreglo + "ID = new Array();" + arreglo + "Desc = new Array();");
//out.println("<script language=\"javascript\">");
//out.println("cadena=\"\";");   
	      
   for (int i=0; i<ids.size(); i++) {
	   //out.println("cadena += \"" + ids.get(i) + "|" + descripciones.get(i) + "\\n\";");
	   
	   //COMENTADO SEBA // out.print(varMeta + ids.get(i) + "|" + descripciones.get(i) + "@");
	   
	   varMeta += ids.get(i) + "|" + descripciones.get(i) + "@";
	   
	   //out.print( arreglo + "ID[" + i + "]='" + ids.get(i) + "';\n" );
	   //out.print( arreglo + "Desc[" + i + "]='" + descripciones.get(i) + "';\n");
	   //if (seleccionado.equals(String.valueOf(ids.get(i)))) indiceSeleccionado=i;
   }
   varMeta += "</body></html>";
   out.print(varMeta);
   //out.println("window.parent.cargar" + arreglo + "(cadena);\n");
   //out.println("</script>");
   //out.println(arreglo + "Seleccionado = " + indiceSeleccionado + ";");
  }
  
  catch( IOException ioe )
  {
   throw new ServletException( ioe );
  }
  finally {
	  if (ids != null) ids.clear();
	  if (descripciones != null) descripciones.clear();
	  /*if (session!=null){
		  if (session.getTransaction() != null)
			  session.getTransaction().rollback();
		  if (session.isOpen())
			  session.close();  
	  }*/
	  
  }
}
	
	
    public void destroy() {
		    // Cleanup here...
	  }

}
